package com.mlh.hash;

import java.util.HashMap;
import java.util.Map;


//给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
//注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
//输入: s = "anagram", t = "nagaram"
//输出: true
public class IsAnagram {
	public static void main(String[] args) {
		char a='a';
		System.out.println('a'-'a');
	}
	//方法一 用来map来写 实际上根本不需要 这样写太浪费了
	public boolean method1(String s, String t) {
		if(s.length()!=t.length()){
			return false;
		}
		Map<Character,Integer> map=new HashMap<>();
		char[] sC = s.toCharArray();
		char[] tC = t.toCharArray();
		for(int i=0;i<sC.length;i++){
			if(map.containsKey(sC[i])){
				map.put(sC[i],map.get(sC[i])+1);
			}else{
				map.put(sC[i],1);
			}
		}
		for(int i=0;i<tC.length;i++){
			if(!map.containsKey(tC[i])||map.get(tC[i])==0){
				return false;
			}
			map.put(tC[i],map.get(tC[i])-1);
		}
		return true;
	}

	//这个方法是通过自己的散列方式来将字符记录到hash数组中
	public static boolean method2(String s,String t){
		if(s.length()!=t.length()){
			return false;
		}
		char[] sC = s.toCharArray();
		char[] tC = t.toCharArray();
		int[] hash=new int[26];//该数组作为hash表 hash值是字符的ascll码-‘a’的ascll码 所以在0-25之间
		for(int i=0;i<sC.length;i++){
			hash[sC[i]-'a']++;
			hash[tC[i]-'a']--;
		}
		for(int i=0;i<hash.length;i++){
			if(hash[i]!=0){
				return false;
			}
		}
		return true;
	}
}
